"use strict";

import { app, protocol, BrowserWindow, ipcMain, screen,desktopCapturer } from "electron";
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
const isDevelopment = process.env.NODE_ENV !== "production";
import path from "path";
// const __dirname = path.dirname(__filename);
// const __dirname = path.resolve();
// Scheme must be registered before the app is ready
// 方案必须在应用程序准备好之前进行注册
protocol.registerSchemesAsPrivileged([
	{ scheme: "app", privileges: { secure: true, standard: true } },
]);
require('electron-debug')({ enabled: true });
async function createWindow() {
	// Create the browser window.
	// 创建浏览器窗口。
	const win = new BrowserWindow({
		width: 800,
		height: 600,
		minHeight: 600,
		minWidth: 600,
		webPreferences: {
			// Use pluginOptions.nodeIntegration, leave this alone
			// 使用pluginOptions.nodeIntegration，不要管这个

			// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
			// 有关更多信息，请参阅 nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration
			preload: path.join(__dirname, "preload.js"),
			nodeIntegration: false,
			contextIsolation: true,
			enableRemoteModule: false,
		},
	});
    

	if (process.env.WEBPACK_DEV_SERVER_URL) {
		console.log(
			"process.env.WEBPACK_DEV_SERVER_URL",
			process.env.WEBPACK_DEV_SERVER_URL
		);
		// Load the url of the dev server if in development mode
		// 如果处于开发模式，则加载开发服务器的 url
		await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
		// await newWin.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
		// if (!process.env.IS_TEST) win.webContents.openDevTools()
	} else {
		createProtocol("app");
		// Load the index.html when not in development
		// 未开发时加载 index.html
		win.loadURL("app://./index.html");
	}
}

async function createWebrtcWindow() {
	// Create the browser window.
	// 创建浏览器窗口。
	const win2 = new BrowserWindow({
		width: 600,
		height: 600,
		minHeight: 300,
		minWidth: 300,
		webPreferences: {
			nodeIntegration: false,
			contextIsolation: true,
			enableRemoteModule: false,
		},
	});
    win2.loadURL('chrome://webrtc-internals');
}
app.commandLine.appendSwitch("disable-features", "CrossOriginOpenerPolicy");
// Quit when all windows are closed.
// 关闭所有窗口后退出
app.on("window-all-closed", () => {
	// On macOS it is common for applications and their menu bar
	// 在 macOS 上，应用程序及其菜单栏很常见
	// to stay active until the user quits explicitly with Cmd + Q
	// 在用户使用 Cmd + Q 明确退出之前保持活动状态
	// 如果用户不是在 macOS(darwin) 上运行程序，则调用 app.quit()。
	if (process.platform !== "darwin") {
		app.quit();
	}
});

// 当 Linux 和 Windows 应用在没有窗口打开时退出了，macOS 应用通常即使在没有打开任何窗口的情况下也继续运行，并且在没有窗口可用的情况下激活应用时会打开新的窗口。
// 为了实现这一特性，监听 app 模块的 activate 事件。如果没有任何浏览器窗口是打开的，则调用 createWindow() 方法。
app.on("activate", () => {
	// On macOS it's common to re-create a window in the app when the
	// 在macOS上，通常会在应用程序中重新创建一个窗口
	// dock icon is clicked and there are no other windows open.
	// 单击停靠图标并且没有打开其他窗口
	if (BrowserWindow.getAllWindows().length === 0) createWindow();
});

// This method will be called when Electron has finished
// 此方法将在 Electron 完成时调用
// initialization and is ready to create browser windows.
// 初始化并准备好创建浏览器窗口。
// Some APIs can only be used after this event occurs.
// 某些 API 只能在此事件发生后才能使用。
app.on("ready", async () => {
	// if (isDevelopment && !process.env.IS_TEST) {
	//   // Install Vue Devtools
	//   try {
	//     await installExtension(VUEJS_DEVTOOLS)
	//   } catch (e) {
	//     console.error('Vue Devtools failed to install:', e.toString())
	//   }
	// }
	console.log(
		"process.env.WEBPACK_DEV_SERVER_URL",
		process.env.WEBPACK_DEV_SERVER_URL
	);

	createWindow();

    ipcMain.on('createWebrtcWindow', (event) => {
        createWebrtcWindow();
    });
    ipcMain.handle('navigatorShare', (event) => {
        console.log('navigatorShare',event);
        
        return desktopCapturer.getSources({ types: ["screen", "window"] })
    });
});
// 解决wss地址证书问题
app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
    console.log('Certificate error for URL:', url);
    if (url.indexOf('8443') !== -1) {
      // 忽略证书错误
      event.preventDefault();
      callback(true);
    } else {
      callback(false);
    }
});
// Exit cleanly on request from parent process in development mode.
// 在开发模式下根据父进程的请求干净地退出。
if (isDevelopment) {
	if (process.platform === "win32") {
		process.on("message", (data) => {
			if (data === "graceful-exit") {
				app.quit();
			}
		});
	} else {
		process.on("SIGTERM", () => {
			app.quit();
		});
	}
}



// ipcMain.on('window-close',function (){
//   win.close();
//   if(newWin){
//     newWin.close();
//   }
// })
